complupediafandomcom_es-20200214-history
Módulo:Listas
local listas = {} local existeCategoria = require('Módulo:Páginas').existeCategoria -- Función que devuelve los elementos de la lista. -- Solo se obtienen los elementos informados. function listas.ObtenerElementosLista(frame) local Argumentos = frame.args; local parent = frame:getParent(); if not Argumentos1 then Argumentos = parent.args; end local categoria=Argumentos'categoría' or '' local ordenar =Argumentos'ordenar' or '' separador =frame.args'separador' or Argumentos'separador' conjuncion=frame.args'conjunción' or Argumentos'conjunción' local ElementosLista = {} local i = 1; local j=0; while Argumentosi do local TextoAMostrar if Argumentosi and not Argumentosi:match('^%s*$') then j=j+1 -- Añadir el enlace si no incluye ya uno local enlazar = frame.args.enlazar or parent.args.enlazar if mw.ustring.find(Argumentosi, '%[%[') then enlazar = 'no' end if enlazar 'sí' then -- Desambiguar eliminando el texto ente paréntesis del argumento i-ésimo si es de la forma -- "Texto (lo que sea)". -- Esto solo se hará si después de los paréntesis no hay nada. Ejemplos: -- Alfonso Albacete (director) --> Alfonso Albacete -- Carlos Vera --> Carlos Vera TextoAMostrar=Argumentosi:match('^(.*)%s%(.*%)$') or Argumentosi --Obtener el espacio de nombres de los argumentos local espacio_nombres=frame.args.nspace or parent.args.nspace or frame.argsde nombres' or parent.argsde nombres' or mw.title.getCurrentTitle().nsText if espacio_nombres '' then --Se accede a la función con el argumento espacio_nombres pero está sin informar if Argumentosi TextoAMostrar then ElementosListaj = mw.ustring.format('%s',TextoAMostrar) else ElementosListaj = mw.ustring.format('%s',Argumentosi,TextoAMostrar) end else --Se accede sin el espacio de nombres (en cuyo caso se toma el espacio de nombres desde global) o informado. --Obtener el nombre de la página (eliminando el espacio de nombres si lo tiene). Similar a --Por ejemplo, si argumentosi vale "Plantilla:A" se informa nombrepagina con "A". local nombrepagina local noError, pageObject = pcall(mw.title.new, Argumentosi) if noError then nombrepagina = pageObject.text else nombrepagina = Argumentosi end -- Enlazar tomando como espacio de nombres el recibido en el argumento o el global. ElementosListaj = mw.ustring.format( '%s',espacio_nombres,nombrepagina,TextoAMostrar) end else TextoAMostrar = Argumentosi ElementosListaj = TextoAMostrar end -- Añadir el delimitador local delimitador = frame.args.delimitador or parent.args.delimitador or frame.args.delim or parent.args.delim if delimitador then ElementosListaj = delimitador .. ElementosListaj .. delimitador end --Añadir la categoría if categoria ~= '' then -- Utilizar argumentosi si existe la correspondiente categoría local CategoriaElemento = existeCategoria(categoria:gsub('$1',Argumentosi)) -- Si no existe ver si existe la categoría eliminando el texto entre paréntesis if not CategoriaElemento and TextoAMostrar ~= Argumentosi then CategoriaElemento = existeCategoria(categoria:gsub('$1',TextoAMostrar)) end if CategoriaElemento then if ordenar '' then ElementosListaj = ElementosListaj .. '' .. CategoriaElemento .. '' else ElementosListaj = ElementosListaj .. '' .. ordenar .. '' end end end end i = i + 1; end return ElementosLista end -- lista con los elementos separados por comas function listas.lista(frame) -- Obtener los elementos de la lista informados. local ElementosLista= listas.ObtenerElementosLista(frame) if not ElementosLista1 then return end if not separador and not conjuncion then return mw.text.listToText(ElementosLista,', ',' y ') elseif separador and not conjuncion then return mw.text.listToText(ElementosLista, separador, separador) else -- Corregir el separador if separador ',' then separador= ', ' end -- Corregir la conjunción if conjuncion 'o' then conjuncion = ' o ' elseif conjuncion 'y' then conjuncion = ' y ' end return mw.text.listToText(ElementosLista, separador, conjuncion) end end function listas.listahtml(frame) local parent = frame:getParent(); -- Obtener los elementos de la lista informados delimitándolos con local ElementosLista= listas.ObtenerElementosLista(frame) if not ElementosLista1 then return end -- Añadir a los elementos de la lista y local i = 1; while ElementosListai do ElementosListai = ' ' .. ElementosListai .. ' ' i = i + 1; end -- Añadir la clase en su caso local clase = frame.args.clase or parent.args.clase if clase then return '' .. ' ' .. table.concat( ElementosLista ) .. ' ' else --Devolver la lista return ' ' .. table.concat( ElementosLista ) .. ' ' end end function listas.primero(frame) local ElementosLista= listas.ObtenerElementosLista(frame) if not ElementosLista1 then return end table.sort( ElementosLista ) return ElementosLista1 end return listas